package com.kinyx.framework.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.kinyx.framework.annotation.assist.CanNotNull;
import com.kinyx.framework.annotation.assist.Note;
import com.kinyx.framework.annotation.assist.ReturnNotNull;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * 树节点对象
 */
@Getter
@RequiredArgsConstructor
public class TreeNode {

	/** 主键 */
	private final String id;
	/** 名字 */
	private final String name;
	/** 编码 */
	private final String code;
	/** 上级编码 */
	private final String parentCode;
	/** 参数 */
	private Map<String, Object> params = new HashMap<>();
	/** 子节点 */
	private List<TreeNode> children = new ArrayList<>();

	/**
	 * 增加参数
	 * @param key 键
	 * @param value 值
	 * @return 本对象
	 */
	@ReturnNotNull
	@Note("return this")
	public TreeNode addParam(@CanNotNull final String key, @CanNotNull final Object value) {
		this.params.put(key, value);
		return this;
	}

	/**
	 * 增加子节点
	 * @param node 对象
	 * @return 本对象
	 */
	@ReturnNotNull
	@Note("return this")
	public TreeNode addChild(@CanNotNull final TreeNode node) {
		this.children.add(node);
		return this;
	}

}
